#ifndef CUBETA_H_
#define CUBETA_H_
#include "RegistroCubeta.h"
#include "../Entidades/IEntidad.h"
#include <string>
#include <sstream>
#include "../Entidades/Utils.h"

using namespace Entidades;

namespace Hash {

enum EstadoCubeta{OK, LLENO, VACIO, SINACCION,DUPLICADO} ;

class Cubeta: public IEntidad {
private:
   int tamanioDispersion;
   int tamanioCubeta;
   int bytesLibres;
   vector<RegistroCubeta*>* registros;

public:
   Cubeta(int tamanioCubeta);
   Cubeta(int tamanioDispersion,int tamanoBloque);

   EstadoCubeta insertar(RegistroCubeta &nuevoRegistro);
   EstadoCubeta eliminar(RegistroCubeta* registro);
   int buscar(string clave);
   
   void hidratarse(char * bloque,unsigned int tamanoBloque);
   char* construirBuffer();
   virtual unsigned int getTamanioDelBuffer();
   virtual void marcarComoBorrado();
   
   int getBytesOcupados();

   int getBytesLibres();
   void setBytesLibres(int byteLibres);
   int getCargaMaxima() const;
   int getTamanioCubeta() const;
   void setTamanioCubeta(int tamanoCubeta);
   int getTamanioDispersion();
   void setTamanioDispersion(int tamanioDispersion);
   vector<RegistroCubeta*>* getRegistros();
   void setRegistros(vector<RegistroCubeta*> *registros);

   virtual ~Cubeta();

};

} //Fin namespace Hash

#endif /* CUBETA_H_ */
